home *** CD-ROM | disk | FTP | other *** search
- package koala.dynamicjava.interpreter;
-
- import java.net.URL;
- import java.net.URLClassLoader;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Set;
- import koala.dynamicjava.tree.TypeDeclaration;
-
- public class TreeClassLoader extends ClassLoader implements ClassLoaderContainer {
- protected Map classes = new HashMap(11);
- protected Map trees = new HashMap(11);
- protected Interpreter interpreter;
- protected ClassLoader classLoader;
-
- public Class defineClass(String var1, byte[] var2) {
- Class var3 = ((ClassLoader)this).defineClass(var1, var2, 0, var2.length);
- this.classes.put(var1, var3);
- this.trees.remove(var1);
- return var3;
- }
-
- public ClassLoader getClassLoader() {
- return this.classLoader;
- }
-
- public boolean hasDefined(String var1) {
- return this.classes.containsKey(var1);
- }
-
- public Set getClassNames() {
- return this.classes.keySet();
- }
-
- public void addTree(String var1, TypeDeclaration var2) {
- this.trees.put(var1, var2);
- }
-
- public TypeDeclaration getTree(String var1) {
- return (TypeDeclaration)this.trees.get(var1);
- }
-
- public void addURL(URL var1) {
- if (this.classLoader == null) {
- this.classLoader = new URLClassLoader(new URL[]{var1});
- } else {
- this.classLoader = new URLClassLoader(new URL[]{var1}, this.classLoader);
- }
-
- }
-
- protected Class findClass(String var1) throws ClassNotFoundException {
- if (this.classes.containsKey(var1)) {
- return (Class)this.classes.get(var1);
- } else {
- try {
- if (this.classLoader != null) {
- return Class.forName(var1, true, this.classLoader);
- }
- } catch (ClassNotFoundException var3) {
- }
-
- return this.interpreter.loadClass(var1);
- }
- }
-
- public TreeClassLoader(Interpreter var1) {
- this.interpreter = var1;
- }
- }
-